extends Area2D

'''
	物理推力盒子
'''
@export var SPEED = 100				## 最大速度
@export var FRICTION = 100			## 摩擦力
@export var ACCELERATION = 300		## 加速度

var direction = Vector2.ZERO

# 获得该空间的父类对象
# 只获取一次
@onready var parent = $".."

'''
	组件加载时执行
	只执行一次
'''
func _ready():
	# 绑定信号
	connect("body_entered", enterArea)
	connect("body_exited", exitArea)

'''
	每帧执行一次
	@param delta 每帧执行的时间
'''
func _physics_process(delta):
	# 方向不为0向量, 代表有某个方向的力
	if direction != Vector2.ZERO and direction != null:
		# 将物体以delta * ACCELERATION的速度, 向direction的方向SPEED速度接近
		parent.velocity = parent.velocity.move_toward(direction * SPEED, delta * ACCELERATION)
	else:
		# 力消失, 将物体以delta * FRICTION速度, 接近Vector2.ZERO
		parent.velocity = parent.velocity.move_toward(Vector2.ZERO, delta * FRICTION)
	
	parent.move_and_slide()
	#parent.move_and_collide(parent.velocity * delta)
	
'''
	进入碰撞箱
	@param body 碰撞的对象
'''
func enterArea(body):
	# 这个只是玩家进入碰撞体一瞬间的direction, 玩家在碰撞体中改变方向是获取不到的
	# 如果直接获得玩家对象, 玩家在碰撞体中改变方向, 就会产生玩家拉着物体走的bug
	direction = body.direction

'''
	退出碰撞箱
	@param body 退出碰撞体的对象
'''
func exitArea(_body):
	# 玩家离开碰撞体, 把向量归零
	direction = Vector2.ZERO
	
